package com.itgaoshu.hospitalproject.configshiro;

import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;

public class UserCredentialsMatcher {
    //进行加盐的操作

    //随机生成salt，指定它的随机生成的长度
    public static String radomSalt(int len){
        //一个byte占两个字节
        int byteLen = len >> 1;
        //随机数生成器
        SecureRandomNumberGenerator secureRandomNumberGenerator = new SecureRandomNumberGenerator();
        return secureRandomNumberGenerator.nextBytes(byteLen).toHex();
    }

    /**
     *获取加密后的密码，需要指定 hash迭代的次数
     * @param hashAlgorithm ：表示hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。
     * @param password：需要加密的密码
     * @param salt: 盐值
     * @param hashIterations ：迭代的次数，即加密的次数
     * @return
     */
    public static String saltPassword(String hashAlgorithm,String password,String salt,int hashIterations){
        SimpleHash hash = new SimpleHash(hashAlgorithm,password,salt,hashIterations);
        return hash.toString();
    }

    /**
     * 获取加密后的密码，使用默认hash迭代的次数 1 次
     * @param hashAlgorithm :表示hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。
     * @param password:需要加密的密码
     * @param salt ：盐值
     * @return :返回加密后的密码
     */
    public static String saltPassword(String hashAlgorithm,String password,String salt){
        return saltPassword("MD5",password,salt,2);
    }

}
